package routers

import (
    "github.com/gin-gonic/gin"
    "net/http"
    "yi-shou-backstage/api"
    "yi-shou-backstage/config"
    "yi-shou-backstage/middleware"
)

// 路由
func InitRouter() *gin.Engine {
    // 设置运行模式
    gin.SetMode(config.Conf.Server.Mode)

    // 创建一个默认的路由引擎
    // r := gin.Default()
    router := gin.New()

    // 设置静态资源路径
    //router.Static("/static", "./static")
    router.StaticFS("/static", http.Dir("./static"))
    //router.StaticFile("/favicon.ico", "./static/favicon.ico")

    // 注册中间件
    // Recovery中间件会recover任何panic。如果有panic的话，会写入500响应码
    router.Use(gin.Recovery())
    // 注册自定义的日志器
    router.Use(middleware.LoggerMiddleware())
    // 注册 Cors 中间件，支持跨域访问
    router.Use(middleware.Cors())

    // 登录
    router.POST("/api/authorizations", api.AuthorizationsApi)

    // 需要验证 JWT-token 的路由组
    JwtRouterGroup := router.Group("/api")
    JwtRouterGroup.Use(middleware.JwtToken())
    {
        // 刷新token
        JwtRouterGroup.PUT("/authorizations", api.RefreshTokenApi)
        // 编辑用户头像
        JwtRouterGroup.PATCH("/user/photo", api.PatchUserPhotoApi)
        // 修改用户信息
        JwtRouterGroup.PATCH("/user/profile", api.PatchUserProfileApi)
        // 获取用户个人资料
        JwtRouterGroup.GET("/user/profile", api.GetUserProfileApi)
        // 获取粉丝列表
        JwtRouterGroup.GET("/followers", api.GetFollowersApi)
        // 上传用户图片素材
        JwtRouterGroup.POST("/user/images", api.UploadUserImageApi)
        // 收藏图片素材
        JwtRouterGroup.PUT("/user/images/:id", api.PutUserImageApi)
        // 图片列表
        JwtRouterGroup.GET("/user/images", api.GetUserImagesApi)
        // 删除图片素材
        JwtRouterGroup.DELETE("/user/images/:id", api.DeleteUserImageApi)
        // 发表文章
        JwtRouterGroup.POST("/article", api.CreateArticleApi)
        // 修改文章
        JwtRouterGroup.PUT("/article/:id", api.UpdateArticleApi)
        // 获取指定的文章
        JwtRouterGroup.GET("/article/:id", api.GetArticleApi)
        // 获取文章列表
        JwtRouterGroup.GET("/articles", api.ListArticlesApi)
        // 删除文章
        JwtRouterGroup.DELETE("/article/:id", api.DeleteArticleApi)
        // 新增文章频道
        JwtRouterGroup.POST("/channel", api.CreateChannelApi)
        // 获取文章频道
        JwtRouterGroup.GET("/channels", api.ListChannelsApi)
        // 添加评论或者评论回复
        JwtRouterGroup.POST("/comments", api.PostCommentApi)
        // 修改评论置顶
        JwtRouterGroup.PUT("/comments/:target/sticky", api.PutCommentStickyApi)
    }

    return router
}
